#!/usr/bin/env python
# -*- coding: UTF8 	-*-

from GladeConnect import GladeConnect
import completion
import SimpleTree
import ifd
import gtk
import dialogos
import debugwindow
import sys
import comunes
from psycopg2 import connect
from strSQL.basicas import strSelectEstanque
import treetohtml

(CAPACIDAD,
 CODIGO,
 DESCRIPCION) = range (3)

class wnEstanque(GladeConnect):
    def __init__ (self, conexion=None, padre=None, root="wnEstanque"):
        GladeConnect.__init__(self, "glade/wnEstanque.glade", root)
        self.cnx=conexion
        self.cursor=self.cnx.cursor()
        self.padre = padre
        if padre is None:
            self.wnEstanque.maximize()
            self.frm_padre=self.wnEstanque
        else:
            self.frm_padre = padre.frm_padre
            
        self.crea_columnas()
        self.carga_datos()
        
    def crea_columnas(self):
        columnas=[]
        columnas.append([CODIGO, "Código", int])
        columnas.append([DESCRIPCION, "Descripción", str])
        columnas.append([CAPACIDAD, "Capacidad", str])
    
        self.modelo=gtk.ListStore(int, str, str)
        SimpleTree.GenColsByModel(self.modelo, columnas, self.treeEstanque)
        self.col_data = [x[0] for x in columnas]
        
    def on_btnImprimir_clicked(self, btn=None):
        t = treetohtml.TreeToHTML(self.treeEstanque,"Estanque", self.col_data)
        t.show()
        
    def carga_datos(self):
        self.modelo=ifd.ListStoreFromSQL(self.cnx, strSelectEstanque)
        self.treeEstanque.set_model(self.modelo)
    
    def on_treeEstanque_row_activated(self, tree=None, path=None, col=None):
        self.on_btnPropiedades_clicked()
    
    def on_btnAnadir_clicked(self, btn=None):
        dlg = dlgEstanque(self.cnx, self.frm_padre, False)
        response = dlg.dlgEstanque.run()
        if response == gtk.RESPONSE_OK:
            #if not self.modelo is None:
            #    self.modelo.clear()
            self.carga_datos()
        
    def on_btnQuitar_clicked(self, btn=None):
        model, it = self.treeEstanque.get_selection().get_selected()
        if model is None or it is None:
            return
        codigo = model.get_value(it, CODIGO)
        descripcion = model.get_value(it, DESCRIPCION)
        
        if dialogos.yesno("Desea eliminar el Estanque , <b>%s</b>, esta acción no se puede deshacer.\n ¿Esta Seguro de Eliminar?"%descripcion, self.frm_padre) == gtk.RESPONSE_YES:
            llaves = {'codigo_estanque':codigo}
            sql = ifd.deleteFromDict("traza.estanque",llaves)
            try:
                self.cursor.execute(sql, llaves)
                model.remove(it)
            except:
                print sys.exc_info()[1]
                dialogos.error("<b>NO SE PUEDE ELIMINAR</b>\nEl Estanque <b>%s</b> se encuentra relacionado con Fermentación. "%descripcion)
            
    def on_btnPropiedades_clicked(self, btn=None):
        model, it = self.treeEstanque.get_selection().get_selected()
        if model is None or it is None:
            return
        
        dlg=dlgEstanque(self.cnx, self.frm_padre, False)
        dlg.entCodigo.set_text(model.get_value(it, CODIGO))
        dlg.spnCapacidad.set_value(float(model.get_value(it,CAPACIDAD)))
        dlg.entDescripcion.set_text(model.get_value(it,DESCRIPCION))
        dlg.editando = True
        response = dlg.dlgEstanque.run()
        if response == gtk.RESPONSE_OK:
            self.modelo.clear()
            self.carga_datos()
            

    def on_btnCerrar_clicked(self, btn=None):
        if self.padre is None:
            self.on_exit()
        else:
            self.padre.remove_tab("Estanque")


class dlgEstanque(GladeConnect):
    
    def __init__(self, conexion=None, padre=None, editando=False):
        GladeConnect.__init__(self, "glade/wnEstanque.glade", "dlgEstanque")
        self.dlgEstanque.show_all()
        self.cnx=conexion
        self.cursor=self.cnx.cursor()
        self.dlgEstanque.set_transient_for(padre)
        self.editando=editando
        
    def on_btnAceptar_clicked(self, btn=None):
        if self.entDescripcion.get_text() == "" :
            dialogos.error("El campo <b>Descripción</b> no puede estar vacío.")
            return
        
        if self.spnCapacidad.get_value() <= 0:
            dialogos.error("El campo <b>Capacidad</b> debe ser mayor que cero.")
            return
        
        campos = {}
        llaves = {}
        
        campos['capacidad_estanque'] = self.spnCapacidad.get_value()
        campos['descripcion_estanque'] = self.entDescripcion.get_text().upper()
        
        if not self.editando:
            sql=ifd.insertFromDict("traza.estanque", campos)
        else:
            llaves['codigo_estanque']=self.entCodigo.get_text()
            sql, campos=ifd.updateFromDict("traza.estanque", campos, llaves)
            
        self.cursor.execute(sql, campos)
        self.dlgEstanque.hide()
        
    def on_btnCancelar_clicked(self, btn=None):
        self.dlgEstanque.hide()


if __name__ == "__main__":
    cnx = connect("dbname=traza user=traza host=localhost password=123")
    #cnx.autocommit()
    sys.excepthook=debugwindow.show
    w = wnEstanque(cnx)
    
    gtk.main()
